#ifndef __USER_H__
#define __USER_H__

#include "Head.h"
#include "flight.h"

// 逻辑结构 单链表 用户界面 实现用户 登录 功能

#define Max 10 // 顺序表动态空间大小 (最多订购十张机票)

// 定义 顺序表 储存用户的航班订单信息
typedef struct Order_Flight_Data
{
    Flight_data *Order_Data; // 用户的航班订单信息 指针 指向 开辟的数据动态空间
    int len;                 // 记录顺序表长度

} Order_Flight_Data;

// 定义用户数据 结构体
typedef struct User_data
{
    char user[20];            // 用户名
    char pas[20];             // 密码
    int balance;              // 余额
    // int pay_rank[100];        // 充值记录
    char Account_level[20];   // 账户级别   /*Regular 普通用户  Silver 银卡会员(9折)   Gold 金卡会员(8折)  Plattnum 白金会员7折) Admin 管理员*/
    Order_Flight_Data *Order; // 顺序表 储存 用户航班订单
} User_data;

// 定义单链表节点 结构体
typedef struct User_Node
{
    User_data data;         // 数据域
    struct User_Node *next; // 指针域
} User_Node;

// 定义单链表头节点 结构体
typedef struct User_Head_Node
{
    User_Node *next; // 指针域

} User_Head_Node;

// 用户函数

// 注册 一开始都是普通用户
void Sign_up(User_Head_Node *Head, User_Head_Node *All , Flight_Head_Node *Flight_Head);

// 登录
void Log_in(User_Head_Node *All_Uear, Flight_Head_Node *Flight_Head);

// 用户界面
void user_interface(User_Node *User, User_Head_Node *User_Head, Flight_Head_Node *Flight_Head);

// ==================== 用户功能 ====================

// 浏览所有航班
void Flight_Browse(Flight_Head_Node *Head);

// 查询航班 班次/终点
Flight_Node *Flight_Inquire(Flight_Head_Node *Head);

// 查询用户购入的机票
void Inquire_Ticket(User_Node *User);

// 修改密码
void Modify_Pas(User_Node *User, User_Head_Node *Head);

// 充值
void Pay(User_Node *User, User_Head_Node *Head);

// 升级vip
void User_Upgrade(User_Node *User, User_Head_Node *Head);

// 购票 成功(余票-1 / 扣余额) 失败(飞机已经起飞 / 余额不足 / 机票售空) vip打折
void Buy_Air_Ticket(Flight_Head_Node *Head, User_Head_Node *User_Head , User_Node *User);

// 退票 查询用户购入的机票 选择要退的机票 成功(余票+1 / 余额返还) 失败(已经起飞)
void Return_Ticket(Flight_Head_Node *Head , User_Head_Node *User_Head , User_Node *User );

// 添加管理员用户
void Adm_Add(User_Head_Node *All);

// 修改用户信息
void User_Add(User_Head_Node *All);

#endif // __USER_H__
